﻿/**
 * @file lv_conf.h
 * 适用于v9.2.3-dev的配置文件
 */

/*
 * 将此文件复制为 `lv_conf.h`
 * 1. 直接放在 `lvgl` 文件夹旁边
 * 2. 或者放在其他任何位置，然后
 *    - 定义 `LV_CONF_INCLUDE_SIMPLE`
 *    - 将该路径添加为包含路径
 */

/* clang-format off */
#if 1 /*内容启用*/
#ifndef LV_CONF_H
#define LV_CONF_H

/*如果需要在此处包含任何内容，请在 `__ASSEMBLY__` 保护宏内进行操作 */
#if  0 && defined(__ASSEMBLY__)
#include "my_include.h"
#endif

/*====================
   颜色设置
 *====================*/

/*颜色深度: 1 (I1), 8 (L8), 16 (RGB565), 24 (RGB888), 32 (XRGB8888)*/
#define LV_COLOR_DEPTH 16

/*=========================
   标准库包装器设置
 *=========================*/

/* 可能的值
 * - LV_STDLIB_BUILTIN:     LVGL的内置实现
 * - LV_STDLIB_CLIB:        标准C函数，如malloc、strlen等
 * - LV_STDLIB_MICROPYTHON: MicroPython实现
 * - LV_STDLIB_RTTHREAD:    RT-Thread实现
 * - LV_STDLIB_CUSTOM:      外部实现这些函数
 */
#define LV_USE_STDLIB_MALLOC    LV_STDLIB_BUILTIN
#define LV_USE_STDLIB_STRING    LV_STDLIB_BUILTIN
#define LV_USE_STDLIB_SPRINTF   LV_STDLIB_BUILTIN

#define LV_STDINT_INCLUDE       <stdint.h>
#define LV_STDDEF_INCLUDE       <stddef.h>
#define LV_STDBOOL_INCLUDE      <stdbool.h>
#define LV_INTTYPES_INCLUDE     <inttypes.h>
#define LV_LIMITS_INCLUDE       <limits.h>
#define LV_STDARG_INCLUDE       <stdarg.h>

#if LV_USE_STDLIB_MALLOC == LV_STDLIB_BUILTIN
    /*`lv_malloc()` 可用的内存大小（以字节为单位，>= 2kB）*/
    #define LV_MEM_SIZE (1024 * 1024)

    /*`lv_malloc()` 内存扩展的大小（以字节为单位）*/
    #define LV_MEM_POOL_EXPAND_SIZE 0

    /*为内存池设置一个地址，而不是将其作为普通数组进行分配。也可以位于外部SRAM中。*/
    #define LV_MEM_ADR 0     /*0: 未使用*/
    /*不使用地址，而是提供一个内存分配器，该分配器将被调用来为LVGL获取一个内存池。例如 my_malloc*/
    #if LV_MEM_ADR == 0
        #undef LV_MEM_POOL_INCLUDE
        #undef LV_MEM_POOL_ALLOC
    #endif
#endif  /*LV_USE_STDLIB_MALLOC == LV_STDLIB_BUILTIN*/

/*====================
   硬件抽象层（HAL）设置
 *====================*/

/*默认的显示屏刷新、输入设备读取和动画步进周期。*/
#define LV_DEF_REFR_PERIOD  5      /*[毫秒]*/

/*默认的每英寸点数（DPI）。用于初始化默认大小，如小部件大小、样式填充。
 *(不太重要，可以调整它来修改默认大小和间距)*/
#define LV_DPI_DEF 130     /*[像素/英寸]*/

/*=================
 * 操作系统
 *=================*/
/*选择要使用的操作系统。可能的选项有：
 * - LV_OS_NONE
 * - LV_OS_PTHREAD
 * - LV_OS_FREERTOS
 * - LV_OS_CMSIS_RTOS2
 * - LV_OS_RTTHREAD
 * - LV_OS_WINDOWS
 * - LV_OS_MQX
 * - LV_OS_CUSTOM */
#define LV_USE_OS   LV_OS_NONE

#if LV_USE_OS == LV_OS_CUSTOM
    #define LV_OS_CUSTOM_INCLUDE <stdint.h>
#endif
#if LV_USE_OS == LV_OS_FREERTOS
    /*
     * 使用直接通知方式解锁RTOS任务比使用中间对象（如二进制信号量）解锁任务快45%，并且使用的RAM更少。
     * 当只有一个任务可以作为事件的接收者时，才能使用RTOS任务通知。
     */
    #define LV_USE_FREERTOS_TASK_NOTIFY 1
#endif

/*========================
 * 渲染配置
 *========================*/

/*将所有图层和图像的步幅对齐到这个字节数*/
#define LV_DRAW_BUF_STRIDE_ALIGN                1

/*将绘图缓冲区地址的起始地址对齐到这个字节数*/
#define LV_DRAW_BUF_ALIGN                       4

/*使用矩阵进行变换。
 *要求:
    `LV_USE_MATRIX = 1`。
    渲染引擎需要支持3x3矩阵变换。*/
#define LV_DRAW_TRANSFORM_USE_MATRIX            0

/* 如果一个小部件的 `style_opa < 255`（不是 `bg_opa`、`text_opa` 等）或者不是NORMAL混合模式
 * 它会在渲染之前被缓冲到一个“简单”图层中。小部件可以分更小的块进行缓冲。
 * “变换图层”（如果设置了 `transform_angle/zoom`）使用更大的缓冲区
 * 并且不能分块绘制。 */

/*简单图层块的目标缓冲区大小。*/
#define LV_DRAW_LAYER_SIMPLE_BUF_SIZE    (24 * 1024)   /*[字节]*/

/* 绘图线程的栈大小。
 * 注意：如果启用了FreeType或ThorVG，建议将其设置为32KB或更大。
 */
#define LV_DRAW_THREAD_STACK_SIZE    (8 * 1024)   /*[字节]*/

#define LV_USE_DRAW_SW 1
#if LV_USE_DRAW_SW == 1

    /*
     * 有选择地禁用颜色格式支持，以减小代码大小。
     * 注意：某些功能内部使用特定的颜色格式，例如
     * - 渐变使用RGB888
     * - 带有透明度的位图可能使用ARGB8888
     */

    #define LV_DRAW_SW_SUPPORT_RGB565		1
    #define LV_DRAW_SW_SUPPORT_RGB565A8		0
    #define LV_DRAW_SW_SUPPORT_RGB888		0
    #define LV_DRAW_SW_SUPPORT_XRGB8888		0
    #define LV_DRAW_SW_SUPPORT_ARGB8888		1
    #define LV_DRAW_SW_SUPPORT_L8			0
    #define LV_DRAW_SW_SUPPORT_AL88			0
    #define LV_DRAW_SW_SUPPORT_A8			0
    #define LV_DRAW_SW_SUPPORT_I1			0

    /* 设置绘图单元的数量。
     * > 1 需要在 `LV_USE_OS` 中启用操作系统
     * > 1 意味着多个线程将并行渲染屏幕 */
    #define LV_DRAW_SW_DRAW_UNIT_CNT    1

    /* 使用Arm-2D加速软件渲染 */
    #define LV_USE_DRAW_ARM2D_SYNC      0

    /* 启用原生Helium汇编代码编译 */
    #define LV_USE_NATIVE_HELIUM_ASM    0

    /* 0: 使用简单渲染器，只能绘制带有渐变、图像、文本和直线的简单矩形
     * 1: 使用复杂渲染器，还能绘制圆角、阴影、斜线和圆弧 */
    #define LV_DRAW_SW_COMPLEX          1

    #if LV_DRAW_SW_COMPLEX == 1
        /*允许缓存一些阴影计算。
        *LV_DRAW_SW_SHADOW_CACHE_SIZE 是要缓存的最大阴影大小，其中阴影大小为 `shadow_width + radius`
        *缓存会有LV_DRAW_SW_SHADOW_CACHE_SIZE^2 的RAM开销*/
        #define LV_DRAW_SW_SHADOW_CACHE_SIZE 0

        /* 设置最大缓存的圆数据数量。
        * 四分之一圆的周长会被保存用于抗锯齿
        * 每个圆使用半径 * 4 字节（保存最常用的半径）
        * 0: 禁用缓存 */
        #define LV_DRAW_SW_CIRCLE_CACHE_SIZE 4
    #endif

    #define  LV_USE_DRAW_SW_ASM     LV_DRAW_SW_ASM_NONE

    #if LV_USE_DRAW_SW_ASM == LV_DRAW_SW_ASM_CUSTOM
        #define  LV_DRAW_SW_ASM_CUSTOM_INCLUDE ""
    #endif

    /* 启用软件绘制复杂渐变：任意角度的线性渐变、径向渐变或锥形渐变 */
    #define LV_USE_DRAW_SW_COMPLEX_GRADIENTS    1
#endif

/* 在iMX RTxxx平台上使用NXP的VG-Lite GPU。 */
#define LV_USE_DRAW_VGLITE 0

#if LV_USE_DRAW_VGLITE
    /* 启用针对屏幕尺寸 > 352像素推荐的位图块质量降级解决方法。 */
    #define LV_USE_VGLITE_BLIT_SPLIT 0

    #if LV_USE_OS
        /* 使用额外的绘图线程进行VG-Lite处理。*/
        #define LV_USE_VGLITE_DRAW_THREAD 1

        #if LV_USE_VGLITE_DRAW_THREAD
            /* 启用VG-Lite异步绘图。将多个任务排队并一次性刷新到GPU。 */
            #define LV_USE_VGLITE_DRAW_ASYNC 1
        #endif
    #endif

    /* 启用VG-Lite断言。 */
    #define LV_USE_VGLITE_ASSERT 0
#endif

/* 在iMX RTxxx平台上使用NXP的PXP。 */
#define LV_USE_PXP 0

#if LV_USE_PXP
    /* 使用PXP进行绘图。*/
    #define LV_USE_DRAW_PXP 1

    /* 使用PXP旋转显示屏。*/
    #define LV_USE_ROTATE_PXP 0

    #if LV_USE_DRAW_PXP && LV_USE_OS
        /* 使用额外的绘图线程进行PXP处理。*/
        #define LV_USE_PXP_DRAW_THREAD 1
    #endif

    /* 启用PXP断言。 */
    #define LV_USE_PXP_ASSERT 0
#endif

/* 在RA平台上使用瑞萨的Dave2D。 */
#define LV_USE_DRAW_DAVE2D 0

/* 使用缓存的SDL纹理进行绘图*/
#define LV_USE_DRAW_SDL 0

/* 使用VG-Lite GPU。 */
#define LV_USE_DRAW_VG_LITE 0

#if LV_USE_DRAW_VG_LITE
    /* 启用VG-Lite自定义外部 'gpu_init()' 函数 */
    #define LV_VG_LITE_USE_GPU_INIT 0

    /* 启用VG-Lite断言。 */
    #define LV_VG_LITE_USE_ASSERT 0

    /* VG-Lite刷新提交触发阈值。GPU将尝试批量处理这么多绘图任务。 */
    #define LV_VG_LITE_FLUSH_MAX_COUNT 8

    /* 启用边框来模拟阴影
     * 注意：这通常会提高性能，但不能保证与软件渲染质量相同。 */
    #define LV_VG_LITE_USE_BOX_SHADOW 0

    /* VG-Lite渐变最大缓存数量。
     * 注意：单个渐变图像的内存使用量为4K字节。
     */
    #define LV_VG_LITE_GRAD_CACHE_CNT 32

    /* VG-Lite笔触最大缓存数量。
     */
    #define LV_VG_LITE_STROKE_CACHE_CNT 32

#endif

/*=======================
 * 功能配置
 *=======================*/

/*-------------
 * 日志记录
 *-----------*/

/*启用日志模块*/
#define LV_USE_LOG 1
#if LV_USE_LOG

    /*应该添加的日志重要级别：
    *LV_LOG_LEVEL_TRACE       大量日志，提供详细信息
    *LV_LOG_LEVEL_INFO        记录重要事件
    *LV_LOG_LEVEL_WARN        记录不想要的但未导致问题的事件
    *LV_LOG_LEVEL_ERROR       仅记录关键问题，当系统可能失败时
    *LV_LOG_LEVEL_USER        仅记录用户添加的日志
    *LV_LOG_LEVEL_NONE        不记录任何内容*/
    #define LV_LOG_LEVEL LV_LOG_LEVEL_WARN

    /*1: 使用 'printf' 打印日志；
    *0: 用户需要使用 `lv_log_register_print_cb()` 注册一个回调函数*/
    #define LV_LOG_PRINTF 1

    /*设置打印日志的回调函数。
     *例如 `my_print`。原型应该是 `void my_print(lv_log_level_t level, const char * buf)`
     *可以被 `lv_log_register_print_cb` 覆盖*/
    //#define LV_LOG_PRINT_CB

    /*1: 启用打印时间戳；
     *0: 禁用打印时间戳*/
    #define LV_LOG_USE_TIMESTAMP 1

    /*1: 打印日志的文件和行号；
     *0: 不打印日志的文件和行号*/
    #define LV_LOG_USE_FILE_LINE 1


    /*启用/禁用在产生大量日志的模块中的LV_LOG_TRACE*/
    #define LV_LOG_TRACE_MEM        1
    #define LV_LOG_TRACE_TIMER      1
    #define LV_LOG_TRACE_INDEV      1
    #define LV_LOG_TRACE_DISP_REFR  1
    #define LV_LOG_TRACE_EVENT      1
    #define LV_LOG_TRACE_OBJ_CREATE 1
    #define LV_LOG_TRACE_LAYOUT     1
    #define LV_LOG_TRACE_ANIM       1
    #define LV_LOG_TRACE_CACHE      1

#endif  /*LV_USE_LOG*/

/*-------------
 * 断言
 *-----------*/

/*如果操作失败或发现无效数据，启用断言。
 *如果启用了LV_USE_LOG，失败时将打印错误消息*/
#define LV_USE_ASSERT_NULL          1   /*检查参数是否为NULL。（非常快，推荐）*/
#define LV_USE_ASSERT_MALLOC        1   /*检查内存是否成功分配。（非常快，推荐）*/
#define LV_USE_ASSERT_STYLE         0
#define LV_USE_ASSERT_MEM_INTEGRITY 0
#define LV_USE_ASSERT_OBJ           0

/*当断言发生时添加一个自定义处理程序，例如重启MCU*/
#define LV_ASSERT_HANDLER_INCLUDE <stdint.h>
#define LV_ASSERT_HANDLER while(1);   /*默认情况下暂停*/

/*-------------
 * 调试
 *-----------*/

/*1: 在重绘区域上绘制随机颜色的矩形*/
#define LV_USE_REFR_DEBUG 0

/*1: 为ARGB图层绘制红色覆盖层，为RGB图层绘制绿色覆盖层*/
#define LV_USE_LAYER_DEBUG 0

/*1: 为每个绘制单元的任务绘制不同颜色的覆盖层。
 *同时在白色背景上添加绘制单元的索引编号。
 *对于图层，在黑色背景上添加绘制单元的索引编号。*/
#define LV_USE_PARALLEL_DRAW_DEBUG 0

/*-------------
 * 其他
 *-----------*/

#define LV_ENABLE_GLOBAL_CUSTOM 0
#if LV_ENABLE_GLOBAL_CUSTOM
    /*自定义 'lv_global' 函数要包含的头文件*/
    #define LV_GLOBAL_CUSTOM_INCLUDE <stdint.h>
#endif

/*默认缓存大小（字节）。
 *由图像解码器（如 `lv_lodepng`）使用，用于将解码后的图像保存在内存中。
 *如果大小未设置为0，当缓存满时解码器将无法解码。
 *如果大小为0，则不启用缓存功能，解码后的内存将在使用后立即释放。*/
#define LV_CACHE_DEF_SIZE       0

/*图像头缓存条目的默认数量。该缓存用于存储图像的头信息
 *主要逻辑与 `LV_CACHE_DEF_SIZE` 类似，但用于图像头。*/
#define LV_IMAGE_HEADER_CACHE_DEF_CNT 0

/*每个渐变允许的停止点数量。增加此值以允许更多停止点。
 *每个额外的停止点会增加 (sizeof(lv_color_t) + 1) 字节*/
#define LV_GRADIENT_MAX_STOPS   2

/*调整颜色混合函数的舍入方式。GPU可能会以不同的方式计算颜色混合（混合）。
 *0: 向下舍入，64: 从x.75向上舍入，128: 从一半向上舍入，192: 从x.25向上舍入，254: 向上舍入 */
#define LV_COLOR_MIX_ROUND_OFS  0

/*为每个lv_obj_t添加2个32位变量，以加快获取样式属性的速度 */
#define LV_OBJ_STYLE_CACHE      1

/*为 `lv_obj_t` 添加 `id` 字段 */
#define LV_USE_OBJ_ID           0

/*在对象创建时自动分配一个ID */
#define LV_OBJ_ID_AUTO_ASSIGN   LV_USE_OBJ_ID

/*使用内置的对象ID处理函数：
* - lv_obj_assign_id:       在创建小部件时调用。为每个小部件类使用单独的计数器作为ID。
* - lv_obj_id_compare:      比较ID以确定它是否与请求的值匹配。
* - lv_obj_stringify_id:    返回例如 "button3"
* - lv_obj_free_id:         不做任何操作，因为ID没有内存分配。
* 禁用时，这些函数需要由用户实现。*/
#define LV_USE_OBJ_ID_BUILTIN   1

/*使用对象属性设置/获取API*/
#define LV_USE_OBJ_PROPERTY 0

/*启用属性名称支持*/
#define LV_USE_OBJ_PROPERTY_NAME 1

/* VG-Lite模拟器 */
/*需要：LV_USE_THORVG_INTERNAL 或 LV_USE_THORVG_EXTERNAL */
#define LV_USE_VG_LITE_THORVG  0

#if LV_USE_VG_LITE_THORVG

    /*启用LVGL的混合模式支持*/
    #define LV_VG_LITE_THORVG_LVGL_BLEND_SUPPORT 0

    /*启用YUV颜色格式支持*/
    #define LV_VG_LITE_THORVG_YUV_SUPPORT 0

    /*启用线性渐变扩展支持*/
    #define LV_VG_LITE_THORVG_LINEAR_GRADIENT_EXT_SUPPORT 0

    /*启用16像素对齐*/
    #define LV_VG_LITE_THORVG_16PIXELS_ALIGN 1

    /*缓冲区地址对齐*/
    #define LV_VG_LITE_THORVG_BUF_ADDR_ALIGN 64

    /*启用多线程渲染*/
    #define LV_VG_LITE_THORVG_THREAD_RENDER 0

#endif

/*=====================
 *  编译器设置
 *====================*/

/*对于大端系统，设置为1*/
#define LV_BIG_ENDIAN_SYSTEM 0

/*为 `lv_tick_inc` 函数定义一个自定义属性*/
#define LV_ATTRIBUTE_TICK_INC

/*为 `lv_timer_handler` 函数定义一个自定义属性*/
#define LV_ATTRIBUTE_TIMER_HANDLER

/*为 `lv_display_flush_ready` 函数定义一个自定义属性*/
#define LV_ATTRIBUTE_FLUSH_READY

/*缓冲区所需的对齐大小*/
#define LV_ATTRIBUTE_MEM_ALIGN_SIZE 1

/*在需要对齐内存的地方添加（使用 -Os 时，数据可能默认不会按边界对齐）。
 * 例如 __attribute__((aligned(4)))*/
#define LV_ATTRIBUTE_MEM_ALIGN

/*用于标记大型常量数组（例如字体的位图）的属性*/
#define LV_ATTRIBUTE_LARGE_CONST

/*在RAM中声明大数组的编译器前缀*/
#define LV_ATTRIBUTE_LARGE_RAM_ARRAY

/*将性能关键函数放置在更快的内存中（例如RAM）*/
#define LV_ATTRIBUTE_FAST_MEM

/*将整数常量导出到绑定。此宏用于形式为LV_<CONST>的常量，
 *这些常量也应出现在LVGL绑定API（如MicroPython）中。*/
#define LV_EXPORT_CONST_INT(int_value) struct _silence_gcc_warning /*默认值仅用于防止GCC警告*/

/*在所有全局外部数据前添加此前缀*/
#define LV_ATTRIBUTE_EXTERN_DATA

/*使用 `float` 作为 `lv_value_precise_t` */
#define LV_USE_FLOAT            1

/*启用矩阵支持
 *需要 `LV_USE_FLOAT = 1`*/
#define LV_USE_MATRIX           0

/*在 `lvgl.h` 中包含 `lvgl_private.h`，以默认访问内部数据和函数*/
#define LV_USE_PRIVATE_API		0

/*==================
 *   字库设置
 *===================*/

/*Montserrat字体，具有ASCII范围和一些符号，使用bpp = 4
 *https://fonts.google.com/specimen/Montserrat*/
#define LV_FONT_MONTSERRAT_8  0
#define LV_FONT_MONTSERRAT_10 0
#define LV_FONT_MONTSERRAT_12 0
#define LV_FONT_MONTSERRAT_14 1
#define LV_FONT_MONTSERRAT_16 0
#define LV_FONT_MONTSERRAT_18 0
#define LV_FONT_MONTSERRAT_20 0
#define LV_FONT_MONTSERRAT_22 0
#define LV_FONT_MONTSERRAT_24 0
#define LV_FONT_MONTSERRAT_26 0
#define LV_FONT_MONTSERRAT_28 0
#define LV_FONT_MONTSERRAT_30 0
#define LV_FONT_MONTSERRAT_32 0
#define LV_FONT_MONTSERRAT_34 0
#define LV_FONT_MONTSERRAT_36 0
#define LV_FONT_MONTSERRAT_38 0
#define LV_FONT_MONTSERRAT_40 0
#define LV_FONT_MONTSERRAT_42 0
#define LV_FONT_MONTSERRAT_44 0
#define LV_FONT_MONTSERRAT_46 0
#define LV_FONT_MONTSERRAT_48 0

/*演示特殊功能*/
#define LV_FONT_MONTSERRAT_28_COMPRESSED 0
#define LV_FONT_DEJAVU_16_PERSIAN_HEBREW 0
#define LV_FONT_SIMSUN_14_CJK            0  /*1000个最常见的CJK部首*/
#define LV_FONT_SIMSUN_16_CJK            0

/*像素完美等宽字体*/
#define LV_FONT_UNSCII_8  0
#define LV_FONT_UNSCII_16 0

/*可选地在此声明自定义字体。
 *您可以将这些字体用作默认字体，它们将全局可用。
 *例如 #define LV_FONT_CUSTOM_DECLARE   LV_FONT_DECLARE(my_font_1) LV_FONT_DECLARE(my_font_2)*/
#define LV_FONT_CUSTOM_DECLARE

/*始终设置一个默认字体*/
#define LV_FONT_DEFAULT &lv_font_montserrat_14

/*启用处理大型字体和/或包含大量字符的字体。
 *限制取决于字体大小、字体外观和bpp。
 *如果字体需要，将触发编译器错误。*/
#define LV_FONT_FMT_TXT_LARGE 0

/*启用/禁用对压缩字体的支持。*/
#define LV_USE_FONT_COMPRESSED 0

/*在找不到字形描述符时启用绘制占位符*/
#define LV_USE_FONT_PLACEHOLDER 1

/*=================
 *  文本设置
 *=================*/

/**
 * 为字符串选择一种字符编码。
 * 您的IDE或编辑器应具有相同的字符编码
 * - LV_TXT_ENC_UTF8
 * - LV_TXT_ENC_ASCII
 */
#define LV_TXT_ENC LV_TXT_ENC_UTF8

/*可以在这些字符处断行（换行）文本*/
#define LV_TXT_BREAK_CHARS " ,.;:-_)]}"

/*如果一个单词至少有这么长，将在“最漂亮”的地方断行
 *要禁用，将其设置为 <= 0 的值*/
#define LV_TXT_LINE_BREAK_LONG_LEN 0

/*在断行前，一个长单词放在一行上的最小字符数。
 *取决于 LV_TXT_LINE_BREAK_LONG_LEN。*/
#define LV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN 3

/*在断行后，一个长单词放在一行上的最小字符数。
 *取决于 LV_TXT_LINE_BREAK_LONG_LEN。*/
#define LV_TXT_LINE_BREAK_LONG_POST_MIN_LEN 3

/*支持双向文本。允许混合从左到右和从右到左的文本。
 *方向将根据Unicode双向算法进行处理：
 *https://www.w3.org/International/articles/inline-bidi-markup/uba-basics*/
#define LV_USE_BIDI 0
#if LV_USE_BIDI
    /*设置默认方向。支持的值：
    *`LV_BASE_DIR_LTR` 从左到右
    *`LV_BASE_DIR_RTL` 从右到左
    *`LV_BASE_DIR_AUTO` 检测文本的基本方向*/
    #define LV_BIDI_BASE_DIR_DEF LV_BASE_DIR_AUTO
#endif

/*启用阿拉伯语/波斯语处理
 *在这些语言中，字符应根据其在文本中的位置替换为另一种形式*/
#define LV_USE_ARABIC_PERSIAN_CHARS 0

/*==================
 *  核心控件设置
 *================*/

/*小部件文档：https://docs.lvgl.io/latest/en/html/widgets/index.html*/

#define LV_WIDGETS_HAS_DEFAULT_VALUE  1

#define LV_USE_ANIMIMG    1

#define LV_USE_ARC        1

#define LV_USE_BAR        1

#define LV_USE_BUTTON        1

#define LV_USE_BUTTONMATRIX  1

#define LV_USE_CALENDAR   1
#if LV_USE_CALENDAR
    #define LV_CALENDAR_WEEK_STARTS_MONDAY 0
    #if LV_CALENDAR_WEEK_STARTS_MONDAY
        #define LV_CALENDAR_DEFAULT_DAY_NAMES {"Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"}
    #else
        #define LV_CALENDAR_DEFAULT_DAY_NAMES {"Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"}
    #endif

    #define LV_CALENDAR_DEFAULT_MONTH_NAMES {"January", "February", "March",  "April", "May",  "June", "July", "August", "September", "October", "November", "December"}
    #define LV_USE_CALENDAR_HEADER_ARROW 1
    #define LV_USE_CALENDAR_HEADER_DROPDOWN 1
    #define LV_USE_CALENDAR_CHINESE 0
#endif  /*LV_USE_CALENDAR*/

#define LV_USE_CANVAS     1

#define LV_USE_CHART      1

#define LV_USE_CHECKBOX   1

#define LV_USE_DROPDOWN   1   /*需要：lv_label*/

#define LV_USE_IMAGE      1   /*需要：lv_label*/

#define LV_USE_IMAGEBUTTON     1

#define LV_USE_KEYBOARD   1

#define LV_USE_LABEL      1
#if LV_USE_LABEL
    #define LV_LABEL_TEXT_SELECTION 1 /*启用标签文本选择*/
    #define LV_LABEL_LONG_TXT_HINT 1  /*在标签中存储一些额外信息，以加快绘制非常长的文本*/
    #define LV_LABEL_WAIT_CHAR_COUNT 3  /*等待字符的数量*/
#endif

#define LV_USE_LED        1

#define LV_USE_LINE       1

#define LV_USE_LIST       1

#define LV_USE_LOTTIE     0

#define LV_USE_MENU       1

#define LV_USE_MSGBOX     1

#define LV_USE_ROLLER     1   /*需要：lv_label*/

#define LV_USE_SCALE      1

#define LV_USE_SLIDER     1   /*需要：lv_bar*/

#define LV_USE_SPAN       1
#if LV_USE_SPAN
    /*一行文本最多可以包含的跨度描述符数量 */
    #define LV_SPAN_SNIPPET_STACK_SIZE 64
#endif

#define LV_USE_SPINBOX    1

#define LV_USE_SPINNER    1

#define LV_USE_SWITCH     1

#define LV_USE_TEXTAREA   1   /*需要：lv_label*/
#if LV_USE_TEXTAREA != 0
    #define LV_TEXTAREA_DEF_PWD_SHOW_TIME 1500    /*毫秒*/
#endif

#define LV_USE_TABLE      1

#define LV_USE_TABVIEW    1

#define LV_USE_TILEVIEW   1

#define LV_USE_WIN        1

/*==================
 * 主题
 *==================*/

/* 一个简单、美观且功能完整的主题 */
#define LV_USE_THEME_DEFAULT 1
#if LV_USE_THEME_DEFAULT

    /* 0: 亮色模式; 1: 暗色模式 */
    #define LV_THEME_DEFAULT_DARK 0

    /* 1: 启用按下时放大效果 */
    #define LV_THEME_DEFAULT_GROW 1

    /* 默认过渡时间，单位为 [ms] */
    #define LV_THEME_DEFAULT_TRANSITION_TIME 80
#endif /*LV_USE_THEME_DEFAULT*/

/* 一个非常简单的主题，是自定义主题的良好起点 */
#define LV_USE_THEME_SIMPLE 1

/* 专为单色显示屏设计的主题 */
#define LV_USE_THEME_MONO 0

/*==================
 * 布局
 *==================*/

/* 一种类似于 CSS 中的 Flexbox 的布局 */
#define LV_USE_FLEX 1

/* 一种类似于 CSS 中的 Grid 的布局 */
#define LV_USE_GRID 1

/*====================
 * 第三方库
 *====================*/

/* 通用 API 的文件系统接口 */

/* 设置默认驱动字母可以在文件路径中跳过驱动前缀 */
#define LV_FS_DEFAULT_DRIVE_LETTER '\0'

/* 用于 fopen、fread 等的 API */
#define LV_USE_FS_STDIO 0
#if LV_USE_FS_STDIO
    #define LV_FS_STDIO_LETTER 'A'
    #define LV_FS_STDIO_PATH ""         /* 设置工作目录。文件/目录路径将追加到其后。 */
    #define LV_FS_STDIO_CACHE_SIZE 0    /* >0 时在 lv_fs_read() 中缓存此数量的字节 */
#endif

/* 用于 open、read 等的 API */
#define LV_USE_FS_POSIX 0
#if LV_USE_FS_POSIX
    #define LV_FS_POSIX_LETTER '\0'     /* 设置一个大写字母，通过该字母可访问该驱动器（例如 'A'） */
    #define LV_FS_POSIX_PATH ""         /* 设置工作目录。文件/目录路径将追加到其后。 */
    #define LV_FS_POSIX_CACHE_SIZE 0    /* >0 时在 lv_fs_read() 中缓存此数量的字节 */
#endif

/* 用于 CreateFile、ReadFile 等的 API */
#define LV_USE_FS_WIN32 0
#if LV_USE_FS_WIN32
    #define LV_FS_WIN32_LETTER '\0'     /* 设置一个大写字母，通过该字母可访问该驱动器（例如 'A'） */
    #define LV_FS_WIN32_PATH ""         /* 设置工作目录。文件/目录路径将追加到其后。 */
    #define LV_FS_WIN32_CACHE_SIZE 0    /* >0 时在 lv_fs_read() 中缓存此数量的字节 */
#endif

/* 用于 FATFS 的 API（需要单独添加）。使用 f_open、f_read 等 */
#define LV_USE_FS_FATFS 0
#if LV_USE_FS_FATFS
    #define LV_FS_FATFS_LETTER '\0'     /* 设置一个大写字母，通过该字母可访问该驱动器（例如 'A'） */
    #define LV_FS_FATFS_CACHE_SIZE 0    /* >0 时在 lv_fs_read() 中缓存此数量的字节 */
#endif

/* 用于内存映射文件访问的 API */
#define LV_USE_FS_MEMFS 0
#if LV_USE_FS_MEMFS
    #define LV_FS_MEMFS_LETTER '\0'     /* 设置一个大写字母，通过该字母可访问该驱动器（例如 'A'） */
#endif

/* 用于 LittleFs 的 API */
#define LV_USE_FS_LITTLEFS 0
#if LV_USE_FS_LITTLEFS
    #define LV_FS_LITTLEFS_LETTER '\0'     /* 设置一个大写字母，通过该字母可访问该驱动器（例如 'A'） */
#endif

/* 用于 Arduino LittleFs 的 API */
#define LV_USE_FS_ARDUINO_ESP_LITTLEFS 0
#if LV_USE_FS_ARDUINO_ESP_LITTLEFS
    #define LV_FS_ARDUINO_ESP_LITTLEFS_LETTER '\0'     /* 设置一个大写字母，通过该字母可访问该驱动器（例如 'A'） */
#endif

/* 用于 Arduino Sd 的 API */
#define LV_USE_FS_ARDUINO_SD 0
#if LV_USE_FS_ARDUINO_SD
    #define LV_FS_ARDUINO_SD_LETTER '\0'     /* 设置一个大写字母，通过该字母可访问该驱动器（例如 'A'） */
#endif

/* LODEPNG 解码器库 */
#define LV_USE_LODEPNG 0

/* PNG 解码器（libpng）库 */
#define LV_USE_LIBPNG 0

/* BMP 解码器库 */
#define LV_USE_BMP 0

/* JPG + 分割 JPG 解码器库。
 * 分割 JPG 是一种针对嵌入式系统优化的自定义格式。 */
#define LV_USE_TJPGD 0

/* libjpeg-turbo 解码器库。
 * 支持完整的 JPEG 规范和高性能 JPEG 解码。 */
#define LV_USE_LIBJPEG_TURBO 0

/* GIF 解码器库 */
#define LV_USE_GIF 0
#if LV_USE_GIF
    /* GIF 解码器加速 */
    #define LV_GIF_CACHE_DECODE_DATA 0
#endif


/* 将二进制图像解码到 RAM 中 */
#define LV_BIN_DECODER_RAM_LOAD 0

/* RLE 解压缩库 */
#define LV_USE_RLE 0

/* QR 码库 */
#define LV_USE_QRCODE 0

/* 条形码库 */
#define LV_USE_BARCODE 0

/* FreeType 库 */
#define LV_USE_FREETYPE 0
#if LV_USE_FREETYPE
    /* 让 FreeType 使用 LVGL 内存和文件移植 */
    #define LV_FREETYPE_USE_LVGL_PORT 0

    /* FreeType 中字形的缓存数量。这意味着可以缓存的字形数量。
     * 值越高，使用的内存就越多。 */
    #define LV_FREETYPE_CACHE_FT_GLYPH_CNT 256
#endif

/* 内置 TTF 解码器 */
#define LV_USE_TINY_TTF 0
#if LV_USE_TINY_TTF
    /* 启用从文件加载 TTF 数据 */
    #define LV_TINY_TTF_FILE_SUPPORT 0
    #define LV_TINY_TTF_CACHE_GLYPH_CNT 256
#endif

/* Rlottie 库 */
#define LV_USE_RLOTTIE 0

/* 启用矢量图形 API
 * 需要 `LV_USE_MATRIX = 1` */
#define LV_USE_VECTOR_GRAPHIC  0

/* 从 src/libs 文件夹中启用 ThorVG（矢量图形库） */
#define LV_USE_THORVG_INTERNAL 0 

/* 假设 ThorVG 已安装并链接到项目中，启用它 */
#define LV_USE_THORVG_EXTERNAL 0

/* 使用 lvgl 内置的 LZ4 库 */
#define LV_USE_LZ4_INTERNAL  0

/* 使用外部 LZ4 库 */
#define LV_USE_LZ4_EXTERNAL  0

/* FFmpeg 库，用于图像解码和播放视频
 * 支持所有主要的图像格式，因此不要与其他图像解码器同时启用 */
#define LV_USE_FFMPEG 0
#if LV_USE_FFMPEG
    /* 将输入信息转储到 stderr */
    #define LV_FFMPEG_DUMP_FORMAT 0
#endif

/*==================
 * 其他
 *==================*/

/* 1: 启用为对象拍摄快照的 API */
#define LV_USE_SNAPSHOT 0

/* 1: 启用系统监视器组件 */
#define LV_USE_SYSMON   0
#if LV_USE_SYSMON
    /* 获取空闲百分比。例如：uint32_t my_get_idle(void); */
    #define LV_SYSMON_GET_IDLE lv_timer_get_idle

    /* 1: 显示 CPU 使用率和 FPS 计数
     * 需要 `LV_USE_SYSMON = 1` */
    #define LV_USE_PERF_MONITOR 0
    #if LV_USE_PERF_MONITOR
        #define LV_USE_PERF_MONITOR_POS LV_ALIGN_BOTTOM_RIGHT

        /* 0: 在屏幕上显示性能数据，1: 使用日志打印性能数据。 */
        #define LV_USE_PERF_MONITOR_LOG_MODE 0
    #endif

    /* 1: 显示已使用的内存和内存碎片
     * 需要 `LV_USE_STDLIB_MALLOC = LV_STDLIB_BUILTIN`
     * 需要 `LV_USE_SYSMON = 1` */
    #define LV_USE_MEM_MONITOR 0
    #if LV_USE_MEM_MONITOR
        #define LV_USE_MEM_MONITOR_POS LV_ALIGN_BOTTOM_LEFT
    #endif

#endif /*LV_USE_SYSMON*/

/* 1: 启用运行时性能分析器 */
#define LV_USE_PROFILER 0
#if LV_USE_PROFILER
    /* 1: 启用内置分析器 */
    #define LV_USE_PROFILER_BUILTIN 1
    #if LV_USE_PROFILER_BUILTIN
        /* 默认分析器跟踪缓冲区大小 */
        #define LV_PROFILER_BUILTIN_BUF_SIZE (16 * 1024)     /* [字节] */
    #endif

    /* 分析器要包含的头文件 */
    #define LV_PROFILER_INCLUDE "lvgl/src/misc/lv_profiler_builtin.h"

    /* 分析器起始点函数 */
    #define LV_PROFILER_BEGIN    LV_PROFILER_BUILTIN_BEGIN

    /* 分析器结束点函数 */
    #define LV_PROFILER_END      LV_PROFILER_BUILTIN_END

    /* 带有自定义标签的分析器起始点函数 */
    #define LV_PROFILER_BEGIN_TAG LV_PROFILER_BUILTIN_BEGIN_TAG

    /* 带有自定义标签的分析器结束点函数 */
    #define LV_PROFILER_END_TAG   LV_PROFILER_BUILTIN_END_TAG
#endif

/* 1: 启用猴子测试 */
#define LV_USE_MONKEY 0

/* 1: 启用网格导航 */
#define LV_USE_GRIDNAV 0

/* 1: 启用 lv_obj 片段 */
#define LV_USE_FRAGMENT 0

/* 1: 支持在标签或跨度小部件中使用图像作为字体 */
#define LV_USE_IMGFONT 0

/* 1: 启用观察者模式实现 */
#define LV_USE_OBSERVER 0

/* 1: 启用拼音输入法 */
/* 需要：lv_keyboard */
#define LV_USE_IME_PINYIN 0
#if LV_USE_IME_PINYIN
    /* 1: 使用默认词库 */
    /* 如果不使用默认词库，请确保在设置词库后使用 `lv_ime_pinyin` */
    #define LV_IME_PINYIN_USE_DEFAULT_DICT 1
    /* 设置可显示的候选面板的最大数量 */
    /* 这需要根据屏幕大小进行调整 */
    #define LV_IME_PINYIN_CAND_TEXT_NUM 6

    /* 使用 9 键输入（k9） */
    #define LV_IME_PINYIN_USE_K9_MODE      1
    #if LV_IME_PINYIN_USE_K9_MODE == 1
        #define LV_IME_PINYIN_K9_CAND_TEXT_NUM 3
    #endif /*LV_IME_PINYIN_USE_K9_MODE*/
#endif

/* 1: 启用文件浏览器 */
/* 需要：lv_table */
#define LV_USE_FILE_EXPLORER                     0
#if LV_USE_FILE_EXPLORER
    /* 路径的最大长度 */
    #define LV_FILE_EXPLORER_PATH_MAX_LEN        (128)
    /* 快速访问栏，1: 使用，0: 不使用 */
    /* 需要：lv_list */
    #define LV_FILE_EXPLORER_QUICK_ACCESS        1
#endif

/*==================
 * 设备
 *==================*/

/* 使用 SDL 在 PC 上打开窗口并处理鼠标和键盘 */
#define LV_USE_SDL              1
#if LV_USE_SDL
    #define LV_SDL_INCLUDE_PATH     <SDL2/SDL.h>
    #define LV_SDL_RENDER_MODE      LV_DISPLAY_RENDER_MODE_DIRECT   /* 为获得最佳性能，建议使用 LV_DISPLAY_RENDER_MODE_DIRECT */
    #define LV_SDL_BUF_COUNT        1    /* 1 或 2 */
    #define LV_SDL_ACCELERATED      1    /* 1: 使用硬件加速 */
    #define LV_SDL_FULLSCREEN       0    /* 1: 默认使窗口全屏 */
    #define LV_SDL_DIRECT_EXIT      1    /* 1: 当所有 SDL 窗口关闭时退出应用程序 */
    #define LV_SDL_MOUSEWHEEL_MODE  LV_SDL_MOUSEWHEEL_MODE_ENCODER  /* LV_SDL_MOUSEWHEEL_MODE_ENCODER/CROWN */
#endif

/* 使用 X11 在 Linux 桌面打开窗口并处理鼠标和键盘 */
#define LV_USE_X11              0
#if LV_USE_X11
    #define LV_X11_DIRECT_EXIT         1  /* 当所有 X11 窗口关闭时退出应用程序 */
    #define LV_X11_DOUBLE_BUFFER       1  /* 使用双缓冲区进行渲染 */
    /* 以下渲染模式中只能选择 1 个（建议使用 LV_X11_RENDER_MODE_PARTIAL！） */
    #define LV_X11_RENDER_MODE_PARTIAL 1  /* 部分渲染模式（推荐） */
    #define LV_X11_RENDER_MODE_DIRECT  0  /* 直接渲染模式 */
    #define LV_X11_RENDER_MODE_FULL    0  /* 全渲染模式 */
#endif

/* 使用 Wayland 在 Linux 或 BSD 桌面打开窗口并处理输入 */
#define LV_USE_WAYLAND          0
#if LV_USE_WAYLAND
    #define LV_WAYLAND_WINDOW_DECORATIONS   0    /* 仅在 Mutter/GNOME 上需要绘制客户端窗口装饰 */
    #define LV_WAYLAND_WL_SHELL             0    /* 使用旧版 wl_shell 协议而不是默认的 XDG 外壳 */
#endif

/* /dev/fb 驱动 */
#define LV_USE_LINUX_FBDEV      0
#if LV_USE_LINUX_FBDEV
    #define LV_LINUX_FBDEV_BSD           0  /* BSD 系统支持 */
    #define LV_LINUX_FBDEV_RENDER_MODE   LV_DISPLAY_RENDER_MODE_PARTIAL /* 渲染模式 */
    #define LV_LINUX_FBDEV_BUFFER_COUNT  0 /* 缓冲区数量 */
    #define LV_LINUX_FBDEV_BUFFER_SIZE   60 /* 缓冲区大小 */
#endif

/* 使用 Nuttx 打开窗口并处理触摸屏 */
#define LV_USE_NUTTX    0

#if LV_USE_NUTTX
    #define LV_USE_NUTTX_LIBUV    0 /* 使用 Nuttx 的 libuv 库 */

    /* 使用 Nuttx 自定义初始化 API 打开窗口并处理触摸屏 */
    #define LV_USE_NUTTX_CUSTOM_INIT    0

    /* /dev/lcd 驱动 */
    #define LV_USE_NUTTX_LCD      0
    #if LV_USE_NUTTX_LCD
        #define LV_NUTTX_LCD_BUFFER_COUNT    0
        #define LV_NUTTX_LCD_BUFFER_SIZE     60
    #endif

    /* /dev/input 驱动 */
    #define LV_USE_NUTTX_TOUCHSCREEN    0

#endif

/* /dev/dri/card 驱动 */
#define LV_USE_LINUX_DRM        0

/* TFT_eSPI 接口 */
#define LV_USE_TFT_ESPI         0

/* evdev 输入设备驱动 */
#define LV_USE_EVDEV    0

/* libinput 输入设备驱动 */
#define LV_USE_LIBINPUT    0

#if LV_USE_LIBINPUT
    #define LV_LIBINPUT_BSD    0  /* BSD 系统支持 */

    /* 全键盘支持 */
    #define LV_LIBINPUT_XKB             0
    #if LV_LIBINPUT_XKB
        /* "setxkbmap -query" 可以帮助你找到适合你键盘的正确值 */
        #define LV_LIBINPUT_XKB_KEY_MAP { .rules = NULL, .model = "pc101", .layout = "us", .variant = NULL, .options = NULL }
    #endif
#endif

/* 通过 SPI/并行端口连接的 LCD 设备驱动 */
#define LV_USE_ST7735        0
#define LV_USE_ST7789        0
#define LV_USE_ST7796        0
#define LV_USE_ILI9341       0

#define LV_USE_GENERIC_MIPI (LV_USE_ST7735 | LV_USE_ST7789 | LV_USE_ST7796 | LV_USE_ILI9341)

/* Renesas GLCD 驱动 */
#define LV_USE_RENESAS_GLCDC    0

/* LVGL Windows 后端 */
#define LV_USE_WINDOWS    0

/* 使用 OpenGL 在 PC 上打开窗口并处理鼠标和键盘 */
#define LV_USE_OPENGLES   0
#if LV_USE_OPENGLES
    #define LV_USE_OPENGLES_DEBUG        1 /* 启用或禁用 OpenGL ES 的调试功能 */
#endif

/* QNX Screen 显示和输入驱动 */
#define LV_USE_QNX              0
#if LV_USE_QNX
    #define LV_QNX_BUF_COUNT        1 /* 缓冲区数量（1 或 2） */
#endif

/*==================
* 示例
*==================*/

/* 启用示例以与库一起构建 */
#define LV_BUILD_EXAMPLES 0

/*===================
 * 演示使用
 ====================*/

/* 显示一些小部件。可能需要增加 `LV_MEM_SIZE` */
#define LV_USE_DEMO_WIDGETS 0

/* 演示编码器和键盘的使用 */
#define LV_USE_DEMO_KEYPAD_AND_ENCODER 0

/* 对系统进行基准测试 */
#define LV_USE_DEMO_BENCHMARK 0

/* 对每个图元进行渲染测试。需要至少 480x272 的显示屏 */
#define LV_USE_DEMO_RENDER 0

/* LVGL 的压力测试 */
#define LV_USE_DEMO_STRESS 0

/* 音乐播放器演示 */
#define LV_USE_DEMO_MUSIC 0
#if LV_USE_DEMO_MUSIC
    #define LV_DEMO_MUSIC_SQUARE    0  /* 方形布局 */
    #define LV_DEMO_MUSIC_LANDSCAPE 0  /* 横向布局 */
    #define LV_DEMO_MUSIC_ROUND     0 /* 圆形布局 */
    #define LV_DEMO_MUSIC_LARGE     0 /* 大型布局 */
    #define LV_DEMO_MUSIC_AUTO_PLAY 0 /* 自动播放 */
#endif

/* 弹性布局演示 */
#define LV_USE_DEMO_FLEX_LAYOUT     0

/* 类似智能手机的多语言演示 */
#define LV_USE_DEMO_MULTILANG       0

/* 小部件变换演示 */
#define LV_USE_DEMO_TRANSFORM       0

/* 演示滚动设置 */
#define LV_USE_DEMO_SCROLL          0

/* 矢量图形演示 */
#define LV_USE_DEMO_VECTOR_GRAPHIC  0

/*--LV_CONF_H 结束--*/

#endif /*LV_CONF_H*/

#endif /*"内容启用"结束 */
